// 自定义摄像头头文件
#include "Camera.h"

// 打开摄像头
void MainWindow::on_openCameraButton_clicked()
{
    //1. 创建摄像头类对象（摄像头地址：@device:pnp:\\?\usb#vid_5986&pid_9101&mi_00#7&28b161b1&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global）
    cam = new QCamera("@device:pnp:\\\\?\\usb#vid_5986&pid_9101&mi_00#7&28b161b1&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\\global") ;

    // 2. 创建取景器让摄像头的数据在此控件中显示
    view = new QCameraViewfinder(ui->cameralabel);
    view->resize( ui->cameralabel->size());
    view->show();

    // 3. 把取景器与摄像头进行绑定 (指定摄像头的实时数据输出的目标为指定的取景器中)
    cam->setViewfinder(view);

    // 4. 启动摄像头
    cam->start();

    // 5. 构造一个用于捕获摄像头数据的类对象用于拍照
    capture = new QCameraImageCapture(cam);
    cam->setCaptureMode(QCamera::CaptureStillImage);

    // 6. 连接信号与槽来触发捕获的函数
    connect( capture , &QCameraImageCapture::imageCaptured,
             this , &MainWindow::SlaveImage );
}

// 拍照
void MainWindow::on_photoButton_clicked()
{
    capture->capture();
}

// 保存照片
void MainWindow::SlaveImage(int id, const QImage &preview) {
    qDebug() << "id:" << id ;

    // 1. 保存图片到本地（可选）
    QString imagePath = QString("photo_%1.jpg").arg(QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss"));
    preview.save(imagePath);

    // 2. 将 QImage 转换为二进制数据（BLOB）
    QByteArray imageData;
    QBuffer buffer(&imageData);
    buffer.open(QIODevice::WriteOnly);
    preview.save(&buffer, "JPG"); // 格式可以是 JPG/PNG

    // 3. 连接数据库
    QSqlDatabase db = QSqlDatabase::database(); // 如果已连接，直接获取
    if (!db.isOpen()) {
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("my_database.db");
        if (!db.open()) {
            qDebug() << "Error: Database connection failed!" << db.lastError();
            return;
        }
    }

    // 4. 创建数据表（首次创建）
    QSqlQuery query;
    if (!query.exec("CREATE TABLE IF NOT EXISTS photos ("
                   "id INTEGER PRIMARY KEY AUTOINCREMENT, "
                   "name TEXT NOT NULL, "
                    "image_data BLOB, "
                   "create_time TEXT, "
                    "type_ani_pla TEXT, "
                    "name_ani_pla TEXT, "
                    "detail_ani_pla TEXT )")) {
        qDebug() << "Error: Failed to create table." << query.lastError();
    }

    // 5. 插入图片数据到 SQLite
    query.prepare("INSERT INTO photos (name, image_data, create_time) VALUES (?, ?, ?)");
    query.addBindValue(imagePath);               // 图片名称
    query.addBindValue(imageData);               // 图片二进制数据
    query.addBindValue(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); // 创建时间

    if (!query.exec()) {
        qDebug() << "Error: Failed to insert image into database!" << query.lastError();
    } else {
        qDebug() << "Image saved to database!";
    }
}
